JavaScript-「沒有」重載函式(function overloading)

首先,先了解其他程式語言有的重載函式(function overloading)特性,在C#、C++、Java中,都有重載函式的概念。

重載函式

多個函式可以重複使用同一個函式的名稱,只要有不同數量的參數,就會被判斷為不同個函式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//這裡僅用JS的語法表示其他程式語言的重載函式,但在JS中,無法正常執行
function greet(){
console.log('hi');
}
function greet(name, age){
console.log(name);
console.log(age);
}
function greet(height,weight,age){
console.log(height);
console.log(weight);
console.log(age);
}

//呼叫函式時,帶入不同數量的參數
//就會自動判斷是呼叫哪一個函式
greet();
greet('Amy','20');
greet('70','180','male');

JS「沒有」重載函式

在JavaScript中,函式就是物件,一個變數名稱只能代表一個物件,若用同一個名稱宣告多個函式,後方宣告的函式內容就會覆蓋前方的,所以JavaScript沒有處理重載函式的功能。

通用模式處理

在一般的狀況,若參數值得狀況很多樣,並且要讓函式判別遇到不同參數,需要做出不同的處理過程,可以針對傳入參數做判斷。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function greet(firstName, lastName, language){

language = language||'English';

if(language === 'English'){
console.log('Hi!'+firstName+' '+lastName);
}
if(language === 'Spanish'){
cosole.log('Hola!'+firstName+' '+lastName);
}
}

greet('Amy','Lin','English');
greet('John','Chen','Spanish');

不過,為了簡化呼叫時的傳入資訊,可以改寫為下方常見的模式寫法。
額外新增兩個函式,在其中去執行呼叫不同傳入參數的函式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function greet(firstName, lastName, language){

language = language||'English';

if(language === 'English'){
console.log('Hi!'+firstName+' '+lastName);
}
if(language === 'Spanish'){
cosole.log('Hola!'+firstName+' '+lastName);
}
}

function greetEnglish(firstName, lastName){
greet(firstName, lastName, 'English')
}
function greetSpanish(firstName, lastName){
greet(firstName, lastName, 'Spanish')
}

greetEnglish('Amy','Lin');
greetSpanish('John','Chen');
© 2020 Leah's Blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero